"""
    开闭运算
        cv.morphologyEx(img, op, kernel)
            参数：img：要处理的图像， op：处理方式，开运算：cv.MORPH.OPEN,闭运算：cv.MORPH.CLOSE，kernel：核结构
            作用：开运算：分离物体，消除小区域（消除噪点，去除小的干扰块，而不影响原来的图像）
                  闭运算：与开运算相反，先膨胀后腐蚀，作用是消除/“闭合”物体里面的孔洞（可以填充闭合区域）

"""
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 1. 读取图像
img1 = cv.imread("image/letteropen.png")
img2 = cv.imread("image/letterclose.png")

# 2. 创建核结构
kernel = np.ones((10, 10), np.uint8)

# 3. 开运算和闭运算
cvOpen = cv.morphologyEx(img1, cv.MORPH_OPEN, kernel)  # 开运算
cvClose = cv.morphologyEx(img2, cv.MORPH_CLOSE, kernel)  # 闭运算

# 4. 图像展示
fig, axes = plt.subplots(nrows=1, ncols=4, figsize=(10, 8), dpi=100)
axes[0].imshow(img1[:, :, ::-1])
axes[0].set_title("原图1")
axes[1].imshow(cvOpen[:, :, ::-1])
axes[1].set_title("开运算后结果")
axes[2].imshow(img2[:, :, ::-1])
axes[2].set_title("原图2")
axes[3].imshow(cvClose[:, :, ::-1])
axes[3].set_title("闭运算后结果")
plt.show()
